package com.example.lp.lpuicore.paint;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposeShader;
import android.graphics.LightingColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RadialGradient;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.example.lp.lpuicore.R;
import com.example.lp.lpuicore.paint.model.IPaintModel;

import static com.example.lp.lpuicore.Utils.BitmapUtils.zoomImage;

/**
 * 自定义的Paint展示View
 */
public class PaintView extends View {
    private static final String TAG = "PaintView";
    private Paint mPaint;
    private IPaintModel mShader;
    private Bitmap mBitmap;

    /*第一构造方法，在代码中new这个View的时候会调用*/
    public PaintView(Context context,IPaintModel iPaintModel) {
        super(context);
        Log.i(TAG, "PaintView: 第一构造方法");
        init();
        mShader=iPaintModel;
    }

    /*第二构造方法，在xml布局文件中使用会调用*/
    public PaintView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    /*第三构造方法，我们主动找第二构造函数中调用的，例如
     public PaintView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
             // this(context, attrs, R.attr.MyCustomViewDefStyleAttr);
            //就算使用super(context, attrs);也会自动调用第三构造方法，因为在父类View中，默认使用this(context, attrs, 0)
        }
    用于给出主题style
    主题中如果对defStyleAttr属性进行赋值，显示对defStyleAttr的赋值，优先级最高！
    */
    public PaintView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
        Log.i(TAG, "PaintView: 第三构造方法");
    }

    /*初始化*/
    private void init() {
        Log.i(TAG, "init: ");
        mPaint = new Paint();
        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testface);
        mBitmap = zoomImage(mBitmap, 360, 240);
        setmPaintAbout();

    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int modeX = MeasureSpec.getMode(widthMeasureSpec);
        int modeY = MeasureSpec.getMode(heightMeasureSpec);
        int sizeX = MeasureSpec.getSize(widthMeasureSpec);
        int sizeY = MeasureSpec.getSize(heightMeasureSpec);
        Log.i(TAG, "sizeX: "+sizeX);
        Log.i(TAG, "sizeY: "+sizeY);
        //保存测量宽度和测量高度
        setMeasuredDimension(300, 300);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Log.i(TAG, "onDraw: ");
        mShader.draw(canvas, mPaint);
    }

    public void setShader(IPaintModel iPaintModel) {
        mShader = iPaintModel;
        invalidate();
    }


    private void setmPaintAbout() {
        Log.i(TAG, "setmPaintAbout: ");
        /*Paint的常用属性*/
        //设置颜色
        mPaint.setColor(Color.RED);
        //设置效果，FILL为填充效果，忽略所有与笔画相关的设置
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
//        //设置Paint对象ARGB颜色
//        mPaint.setARGB(255, 255, 255, 0);
//        //设置透明度，范围0-255
//        mPaint.setAlpha(100);
//
//
//        //设置是否开启抗锯齿
//        mPaint.setAntiAlias(true);
//        //描边的宽度，只在style为STROKE模式下生效
//        mPaint.setStrokeWidth(5);
//        //圆角风格，头尾划线的地方采用什么封闭风格
//        mPaint.setStrokeCap(Paint.Cap.ROUND);
//        //拐角风格，划线转弯的地方的风格
//        mPaint.setStrokeJoin(Paint.Join.ROUND);
//
//
//        //设置文本缩放倍数
//        mPaint.setTextScaleX(2);
//        //设置文字的大小
//        mPaint.setTextSize(20);
//        //设置文字的对齐方式
//        mPaint.setTextAlign(Paint.Align.LEFT);
//        //设置下划线
//        mPaint.setUnderlineText(true);
//        //Rect使用,测量文字大小，大小信息方在rect中
//        String text="Paint的Rect使用";
//        Rect rect=new Rect();
//        mPaint.getTextBounds(text,0,text.length(),rect);
//        //获取文字的Metrics信息
//        Paint.FontMetrics fontMetrics=new Paint.FontMetrics();
//        fontMetrics=mPaint.getFontMetrics();
//        //获取文字的宽度
//        float textWith=mPaint.measureText(text);
//
//
//
//
//        //设置环形渲染器
//        mPaint.setShader(new SweepGradient(200,200,Color.BLACK,Color.RED));
//        //设置图层混合模式
//        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
//        //设置颜色过滤器
//        mPaint.setColorFilter(new LightingColorFilter(0x00ffff,0x000000));
//        //设置双线性过滤
//        mPaint.setFilterBitmap(true);
//        //设置画笔遮罩滤镜，传入度数和样式
//        mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));


    }


}
